118 #define KER_TRACE_MODE_STD 0x00
119 #define KER_TRACE_MODE_SENS 0x01
121 #define KER_TRACE_APDU_REQ_TAB " "
122 #define KER_TRACE_APDU_INT_REQ_TAB " Int"
123 #define KER_TRACE_APDU_INT_RESP_TAB " Int"
124 #define KER_TRACE_APDU_RESP_TAB " "
126 #define KER_TRACE_COMB_TAB " "
132 #define KER_DBG_EX(IgnoreLevel,ErrLevel) ((KER_DEBUG == KER_TRUE) && ((KER_DEBUG_LEVEL >= ErrLevel) || (KER_DEBUG_ALL == KER_TRUE) || (IgnoreLevel == KER_TRUE)))
133 #define KER_DBG(ErrLevel) KER_DBG_EX(KER_FALSE,ErrLevel)
134 #define KER_INFO KER_DBG_EX(KER_TRUE,0)
139 #ifndef KER_TRACE_EOL
140 #define KER_TRACE_EOL "\r\n"
146 #ifndef KER_COMMENT_HDR_NO_TIME
148 #if (KER_DBG(KER_DBG_LEVEL_TRACE_COMMENT))
154 #define KER_COMMENT_HDR_NO_TIME(comment) \
157 KER_CHAR ar_chHeader[] = "****************************************************************"; \
158 hal_trace_string(KER_CTX KER_TRACE_EOL); \
159 if ((sizeof(comment) + 12) >= sizeof(ar_chHeader)) \
161 hal_trace_string(KER_CTX "***** "); \
162 hal_trace_string(KER_CTX comment); \
163 hal_trace_string(KER_CTX " *****"); \
167 KER_BYTE btOffset = (sizeof(ar_chHeader) - (sizeof(comment) + 2)) / 2; \
168 ar_chHeader[btOffset] = ' '; \
169 KER_MEM_ADD(ar_chHeader, sizeof(ar_chHeader), btOffset + 1, comment, sizeof(comment) - 1); \
170 ar_chHeader[btOffset + sizeof(comment)] = ' '; \
171 hal_trace_string(KER_CTX ar_chHeader); \
173 hal_trace_string(KER_CTX KER_TRACE_EOL); \
178 #define KER_COMMENT_HDR_NO_TIME(commnet)
185 #ifndef KER_COMMENT_HDR_EX
187 #if (KER_DBG(KER_DBG_LEVEL_TRACE_COMMENT))
193 #define KER_COMMENT_HDR_EX(comment) \
196 KER_COMMENT_HDR_NO_TIME(comment); \
197 hal_trace_time(KER_CTX_SINGLE); \
198 hal_trace_string(KER_CTX KER_TRACE_EOL KER_TRACE_EOL); \
203 #define KER_COMMENT_HDR_EX(commnet)
210 #ifndef KER_COMMENT_FTR_EX
212 #if (KER_DBG(KER_DBG_LEVEL_TRACE_COMMENT))
218 #define KER_COMMENT_FTR_EX(comment) \
221 KER_CHAR ar_chHeader[] = "****************************************************************"; \
222 if ((sizeof(comment) + 12) >= sizeof(ar_chHeader)) \
224 hal_trace_string(KER_CTX "*end* "); \
225 hal_trace_string(KER_CTX comment); \
226 hal_trace_string(KER_CTX " *end*"); \
230 KER_BYTE btOffset = (sizeof(ar_chHeader) - (sizeof(comment) + 12)) / 2; \
231 KER_MEM_ADD(ar_chHeader, sizeof(ar_chHeader), btOffset, "*end* ", 6); \
232 KER_MEM_ADD(ar_chHeader, sizeof(ar_chHeader), btOffset + 6, comment, sizeof(comment) - 1); \
233 KER_MEM_ADD(ar_chHeader, sizeof(ar_chHeader), btOffset + 6 + sizeof(comment) - 1, " *end*", 6); \
234 hal_trace_string(KER_CTX ar_chHeader); \
236 hal_trace_string(KER_CTX KER_TRACE_EOL KER_TRACE_EOL); \
237 hal_trace_flush(KER_CTX_SINGLE); \
242 #define KER_COMMENT_FTR_EX()
249 #ifndef KER_COMMENT_HDR_TEXT
251 #if (KER_DBG(KER_DBG_LEVEL_TRACE_COMMENT))
252 #define KER_COMMENT_HDR_TEXT(text) const KER_CHAR const_ch___CommentHeader[] = text
259 #ifndef KER_COMMENT_HDR
261 #if (KER_DBG(KER_DBG_LEVEL_TRACE_COMMENT))
262 #define KER_COMMENT_HDR(text) KER_COMMENT_HDR_TEXT(text); KER_COMMENT_HDR_EX(const_ch___CommentHeader)
269 #ifndef KER_COMMENT_FTR
271 #if (KER_DBG(KER_DBG_LEVEL_TRACE_COMMENT))
272 #define KER_COMMENT_FTR() KER_COMMENT_FTR_EX(const_ch___CommentHeader)
279 #ifndef KER_COMMENT_TEXT
281 #if (KER_DBG(KER_DBG_LEVEL_TRACE_COMMENT))
287 #define KER_COMMENT_TEXT(text) hal_trace_string(KER_CTX text)
290 #define KER_COMMENT_TEXT(text)
299 #if (KER_DBG(KER_DBG_LEVEL_TRACE_COMMENT))
305 #define KER_COMMENT(comment) \
308 hal_trace_string(KER_CTX comment); \
309 hal_trace_string(KER_CTX KER_TRACE_EOL); \
314 #define KER_COMMENT(commnet)
321 #ifndef KER_COMMENT_TEST_MODE
323 #if (KER_DBG(KER_DBG_LEVEL_TRACE_COMMENT))
324 #define KER_COMMENT_TEST_MODE() KER_COMMENT("########################## TEST MODE! ##########################")
331 #ifndef KER_COMMENT_TEST_MODE_DISABLED
333 #if (KER_DBG(KER_DBG_LEVEL_TRACE_COMMENT))
334 #define KER_COMMENT_TEST_MODE_DISABLED() KER_COMMENT("###################### TEST MODE DISABLED ######################")
341 #ifndef KER_TRACE_TIME
343 #if (KER_DBG(KER_DBG_LEVEL_TRACE_COMMENT))
349 #define KER_TRACE_TIME() hal_trace_time(KER_CTX_SINGLE)
352 #define KER_TRACE_TIME()
359 #ifndef KER_COMMENT_HEX
361 #if (KER_DBG(KER_DBG_LEVEL_TRACE_COMMENT))
367 #define KER_COMMENT_HEX(comment_start, buff, buff_len, comment_end) \
370 hal_trace_string(KER_CTX comment_start); \
371 hal_trace_buffer(KER_CTX buff, buff_len); \
372 hal_trace_string(KER_CTX comment_end); \
377 #define KER_COMMENT_HEX(comment_start, buff, buff_len, comment_end)
387 #define KER_TEXT_HEX(dest, dest_len, buff, buff_len) \
391 KER_CHAR ar_chBuff[8]; \
392 KER_MEM_SET(dest, dest_len, 0, dest_len); \
393 for (usI = 0; usI < (KER_BYTE)(buff_len); usI++) \
395 hal_sprintf(KER_CTX ar_chBuff, sizeof(ar_chBuff), "%02X", (KER_NATIVE_UINT)buff[usI]); \
396 KER_MEM_ADD(dest, dest_len, usI * 2, ar_chBuff, 2); \
405 #ifndef KER_COMMENT_STR
407 #if (KER_DBG(KER_DBG_LEVEL_TRACE_COMMENT))
413 #define KER_COMMENT_STR(comment_start, buff, buff_len, comment_end) \
416 KER_CHAR ar_ch___Buffer[8]; \
417 KER_INT16U us___Pos; \
418 hal_trace_string(KER_CTX comment_start); \
419 for (us___Pos = 0; us___Pos < (buff_len); us___Pos++) \
421 if ((buff)[us___Pos] >= 0x20) \
422 hal_sprintf(KER_CTX ar_ch___Buffer, sizeof(ar_ch___Buffer), "%c", (KER_CHAR)((buff)[us___Pos])); \
424 hal_sprintf(KER_CTX ar_ch___Buffer, sizeof(ar_ch___Buffer), "[%02X]", (KER_NATIVE_UINT)((buff)[us___Pos])); \
425 hal_trace_string(KER_CTX ar_ch___Buffer); \
427 hal_trace_string(KER_CTX comment_end); \
432 #define KER_COMMENT_STR(comment_start, buff, buff_len, comment_end)
439 #ifndef KER_TRACE_ERR_BUF
442 #define KER_TRACE_ERR_BUF KER_CHAR ar_ch___ErrBuffer[32];
448 #ifndef KER_TRACE_SYS_ERR_BUF
452 #define KER_TRACE_SYS_ERR_BUF KER_CHAR ar_ch___ErrBuffer[32];
454 #define KER_TRACE_SYS_ERR_BUF
461 #ifndef KER_TRACE_BUF
464 #define KER_TRACE_BUF(Size) KER_CHAR ar_ch___InfBuffer[Size];
470 #ifndef KER_RESET_TRACE_BUF
473 #define KER_RESET_TRACE_BUF KER_MEM_SET(ar_ch___InfBuffer, sizeof(ar_ch___InfBuffer), 0, sizeof(ar_ch___InfBuffer));
485 #define KER_ERROR(err_code,trace_level,comment) \
488 if ((KER_DEBUG == KER_TRUE) && (trace_level <= KER_DEBUG_LEVEL)) \
491 if (comment != KER_NULL) \
494 hal_error(KER_CTX trace_level, err_code, comment); \
496 hal_trace_string(KER_CTX comment); \
499 hal_sprintf(KER_CTX ar_ch___ErrBuffer, sizeof(ar_ch___ErrBuffer), " Error: %08lX ", (KER_NATIVE_ULONG)(err_code)); \
500 hal_trace_string(KER_CTX ar_ch___ErrBuffer); \
501 hal_trace_string(KER_CTX __FILE__); \
502 hal_sprintf(KER_CTX ar_ch___ErrBuffer, sizeof(ar_ch___ErrBuffer), " line:%lu" KER_TRACE_EOL, (KER_NATIVE_ULONG)__LINE__); \
503 hal_trace_string(KER_CTX ar_ch___ErrBuffer); \
512 #define KER_ERROR(err_code,trace_level,comment) \
515 if ((KER_DEBUG == KER_TRUE) && (trace_level <= KER_DEBUG_LEVEL)) \
518 if (comment != KER_NULL) \
521 hal_error(KER_CTX trace_level, err_code, comment); \
523 hal_trace_string(KER_CTX comment); \
526 hal_sprintf(KER_CTX ar_ch___ErrBuffer, sizeof(ar_ch___ErrBuffer), " Error: %08lX" KER_TRACE_EOL, (KER_NATIVE_ULONG)(err_code)); \
528 hal_trace_string(KER_CTX ar_ch___ErrBuffer); \
538 #ifndef KER_SYS_ERROR
545 #define KER_SYS_ERROR(err_code,trace_level,comment) \
549 if (comment != KER_NULL) \
552 hal_error(KER_CTX trace_level, err_code, comment); \
554 hal_sprintf(KER_CTX ar_ch___ErrBuffer, sizeof(ar_ch___ErrBuffer), "line:%lu file: ", (KER_NATIVE_ULONG)__LINE__); \
555 hal_error(KER_CTX trace_level, err_code, ar_ch___ErrBuffer); \
556 hal_error(KER_CTX trace_level, err_code, __FILE__); \
565 #define KER_SYS_ERROR(err_code,trace_level,comment) hal_error(KER_CTX trace_level, err_code, comment)
578 #define KER_SYS_INFO(err_code,trace_level,comment) hal_error(KER_CTX trace_level, err_code, comment)
584 #ifndef KER_TRACE_TAG_NOT_FOUND
586 #if (KER_DBG(KER_DBG_LEVEL_TAG_INFO))
591 #define KER_TRACE_TAG_NOT_FOUND(tag, tag_length) \
594 hal_trace_string(KER_CTX "Tag ["); \
595 hal_trace_buffer(KER_CTX tag, tag_length); \
596 hal_trace_string(KER_CTX "] not found!" KER_TRACE_EOL); \
601 #define KER_TRACE_TAG_NOT_FOUND(tag,tag_length)
608 #ifndef KER_TRACE_TAG_DUPLICATION
610 #if (KER_DBG(KER_DBG_LEVEL_TAG_INFO))
630 #define KER_TRACE_TAG_DUPLICATION(tag,tag_length,tlv1,tlv1_length,tlv2,tlv2_length) \
633 hal_trace_string(KER_CTX "Tag ["); \
634 hal_trace_buffer(KER_CTX tag, tag_length); \
635 hal_trace_string(KER_CTX "] duplication!" KER_TRACE_EOL); \
640 #define KER_TRACE_TAG_DUPLICATION(tag,tag_length,tlv1,tlv1_length,tlv2,tlv2_length)
648 #ifndef KER_TRACE_APDU_REQ
650 #if (KER_DBG(KER_DBG_LEVEL_APDU))
657 #define KER_TRACE_APDU_REQ(bInternal,btCase,btCLA,btINS,btP1,btP2,usLc,pbtData,usLe) \
660 hal_sprintf(KER_CTX ar_ch___InfBuffer, sizeof(ar_ch___InfBuffer), "%sRequest: <%02X><%02X><%02X><%02X><%02X> ", \
661 (bInternal)?KER_TRACE_APDU_INT_REQ_TAB:KER_TRACE_APDU_REQ_TAB,(KER_NATIVE_UINT)(btCLA),(KER_NATIVE_UINT)(btINS),(KER_NATIVE_UINT)(btP1),(KER_NATIVE_UINT)(btP2),(KER_NATIVE_UINT)(usLc)); \
662 hal_trace_string(KER_CTX ar_ch___InfBuffer); \
663 if ((hal_get_trace_mode(KER_CTX_SINGLE) == KER_TRACE_MODE_SENS) || (((btCLA) == EMV_APDU_CLA_UNI) && ((btINS) == EMV_APDU_INS_SELECT)))\
664 hal_trace_buffer(KER_CTX pbtData, usLc); \
666 hal_trace_string(KER_CTX "..."); \
667 if (usLe != KER_EMVL1_LE_NULL) \
668 hal_sprintf(KER_CTX ar_ch___InfBuffer, sizeof(ar_ch___InfBuffer), " <%02X> [Case%u]" KER_TRACE_EOL, (KER_NATIVE_UINT)(usLe), (KER_NATIVE_UINT)(btCase)); \
670 hal_sprintf(KER_CTX ar_ch___InfBuffer, sizeof(ar_ch___InfBuffer), " [Case%u]" KER_TRACE_EOL, (KER_NATIVE_UINT)(btCase)); \
671 hal_trace_string(KER_CTX ar_ch___InfBuffer); \
676 #define KER_TRACE_APDU_REQ(bInternal,btCase,btCLA,btINS,btP1,btP2,btLc,pbtData,btLe)
681 #ifndef KER_TRACE_APDU_RESP
683 #if (KER_DBG(KER_DBG_LEVEL_APDU))
690 #define KER_TRACE_APDU_RESP(INTERNAL,SW1SW2,DATA,DATA_LEN) \
693 hal_sprintf(KER_CTX ar_ch___InfBuffer, sizeof(ar_ch___InfBuffer), "%sResponse: Len = %u Sw1Sw2 = <%04X> ", (INTERNAL)?KER_TRACE_APDU_INT_RESP_TAB:KER_TRACE_APDU_RESP_TAB,(KER_NATIVE_UINT)(DATA_LEN),(KER_NATIVE_UINT)(SW1SW2)); \
694 hal_trace_string(KER_CTX ar_ch___InfBuffer); \
695 if (hal_get_trace_mode(KER_CTX_SINGLE) == KER_TRACE_MODE_SENS) \
696 hal_trace_buffer(KER_CTX (DATA), (DATA_LEN)); \
697 hal_trace_string(KER_CTX KER_TRACE_EOL); \
702 #define KER_TRACE_APDU_RESP(INTERNAL,SW1SW2,DATA,DATA_LEN)
707 #ifndef KER_TRACE_NFC_APDU_RESP
709 #if (KER_DBG(KER_DBG_LEVEL_APDU))
716 #define KER_TRACE_NFC_APDU_RESP(INTERNAL,SW1SW2,EXEC_TIME,DATA,DATA_LEN) \
719 hal_sprintf(KER_CTX ar_ch___InfBuffer, sizeof(ar_ch___InfBuffer), "%sResponse: Time = %lu Len = %u Sw1Sw2 = <%04X> ", \
720 (INTERNAL)?KER_TRACE_APDU_INT_RESP_TAB:KER_TRACE_APDU_RESP_TAB, (KER_NATIVE_ULONG)(EXEC_TIME), (KER_NATIVE_UINT)(DATA_LEN), (KER_NATIVE_UINT)(SW1SW2)); \
721 hal_trace_string(KER_CTX ar_ch___InfBuffer); \
722 if (hal_get_trace_mode(KER_CTX_SINGLE) == KER_TRACE_MODE_SENS) \
723 hal_trace_buffer(KER_CTX (DATA), (DATA_LEN)); \
724 hal_trace_string(KER_CTX KER_TRACE_EOL); \
729 #define KER_TRACE_NFC_APDU_RESP(INTERNAL,SW1SW2,EXEC_TIME,DATA,DATA_LEN)
734 #ifndef KER_TRACE_SUPP_AIDS
736 #if (KER_DBG(KER_DBG_LEVEL_TRACE_COMMENT))
741 #define KER_TRACE_SUPP_APP_LIST_DEFAULT
745 #define KER_TRACE_SUPP_AIDS(AidList) def_hal_trace_supp_app(KER_CTX AidList);
748 #define KER_TRACE_SUPP_AIDS(AidList)
755 #if (KER_DBG(KER_DBG_LEVEL_TRACE_COMMENT))
760 #define KER_TRACE_CL_DEFAULT
764 #define KER_TRACE_CL(CL) def_hal_trace_cl(KER_CTX CL);
767 #define KER_TRACE_SUPP_AIDS(pAidList)
772 #ifndef KER_TRACE_TAG
774 #if (KER_DBG(KER_DBG_LEVEL_TAG_LIST))
779 #define KER_TRACE_TAG_DEFAULT
783 #define KER_TRACE_TAG(Tlv,TlvLen,Origin) def_hal_trace_tag(KER_CTX Tlv,TlvLen,Origin)
786 #define KER_TRACE_TAG(TagList,Origin)
791 #ifndef KER_TRACE_CVM_LIST
793 #if (KER_DBG(KER_DBG_LEVEL_TRACE_COMMENT))
798 #define KER_TRACE_CVM_LIST(TranPtr, TrType, TrCurr, IccCurr, AmountX, AmountY) \
801 hal_sprintf(KER_CTX ar_ch___InfBuffer, sizeof(ar_ch___InfBuffer), "CVM List processing: TrType:%02lX Curr:%03lu/%03lu TrAmount:%lu%s CashbackAmount:%lu%s Amount X:%lu Amount Y:%lu StartPos:%lu" KER_TRACE_EOL, \
802 (KER_NATIVE_ULONG)(TrType), (KER_NATIVE_ULONG)(TrCurr), (KER_NATIVE_ULONG)(IccCurr), \
803 (KER_NATIVE_ULONG)(TranPtr->ulAmountAuthLO), (TranPtr->ulAmountAuthHI > 0)?"(!)":"", \
804 (KER_NATIVE_ULONG)(TranPtr->ulAmountOtherLO), (TranPtr->ulAmountOtherHI > 0)?"(!)":"", \
805 (KER_NATIVE_ULONG)(AmountX), (KER_NATIVE_ULONG)(AmountY), (KER_NATIVE_ULONG)((TranPtr->usCvmOffset - 8)/2)); \
806 hal_trace_string(KER_CTX ar_ch___InfBuffer); \
811 #define KER_TRACE_CVM_LIST(TranPtr, TrType, TrCurr, IccCurr, AmountX, AmountY)
816 #ifndef KER_TRACE_TVR
818 #if (KER_DBG(KER_DBG_LEVEL_TRACE_COMMENT))
823 #define KER_TRACE_TVR_DEFAULT
827 #define KER_TRACE_TVR(Comment,Tvr,TvrLen) def_hal_trace_tvr(KER_CTX Comment, Tvr, TvrLen)
830 #define KER_TRACE_TVR(Comment,Tvr,TvrLen)
836 #ifndef KER_TRC_CUSTOM
839 #define KER_TRC_STD hal_set_trace_mode(KER_CTX KER_TRACE_MODE_STD);
841 #define KER_TRC_SENS hal_set_trace_mode(KER_CTX KER_TRACE_MODE_SENS);
844 #define KER_TRC_S hal_sprintf(KER_CTX ar_ch___InfBuffer,sizeof(ar_ch___InfBuffer),
846 #define KER_TRC_E ); hal_trace_string(KER_CTX ar_ch___InfBuffer);
848 #define KER_TRC_NL hal_trace_string(KER_CTX KER_TRACE_EOL);
850 #define KER_TRC_TIME hal_trace_time(KER_CTX_SINGLE);
void KER_VOID
Definition: emv_platform.h:66
KER_INT8U KER_BOOL
Definition: emv_platform.h:67
uint8_t KER_BYTE
Definition: emv_platform.h:70
KER_INT16U KER_RES
Definition: emv_platform.h:68
unsigned short KER_INT16U
Definition: emv_platform.h:61
char KER_CHAR
Definition: emv_platform.h:65
#define KER_CTX_PARAM
Definition: emv_context.h:53
#define KER_CTX_SINGLE_PARAM
Definition: emv_context.h:58
KER_VOID def_hal_trace_supp_app(KER_CTX_PARAM const KER_TLV *pSuppAppList)
Default "trace supported applications" implementation.
KER_BOOL hal_trace_time(KER_CTX_SINGLE_PARAM)
Trace timestamp.
KER_BOOL hal_trace_buffer(KER_CTX_PARAM const KER_BYTE *pbtDataBuffer, KER_INT16U usDataBufferSize)
Trace povided data buffer.
KER_BOOL hal_keep_trace_time(KER_CTX_PARAM KER_BYTE *pbtTimeBuffer, KER_INT16U *pusTimeBufferSize)
Keep trace timestamp.
KER_VOID def_hal_trace_tag(KER_CTX_PARAM const KER_BYTE *pbtTlv, KER_INT16U usTlvLen, KER_INT16U usOrigin)
Default "trace obtained tag" implementation.
KER_VOID def_hal_trace_cl(KER_CTX_PARAM const KER_TLV *pCL)
Default "trace candidate list" implementation.
KER_BOOL hal_trace_string(KER_CTX_PARAM const KER_CHAR *pchString)
Trace povided nul-term string.
KER_BYTE hal_get_trace_mode(KER_CTX_SINGLE_PARAM)
Get trace mode.
KER_BOOL hal_error(KER_CTX_PARAM KER_INT16U usTraceLevel, KER_RES resErrCode, const KER_CHAR *pchErrorText)
Trace error to system error journal.
KER_BOOL hal_trace_flush(KER_CTX_SINGLE_PARAM)
Flush trace to trace file (optional)
KER_BOOL hal_set_trace_mode(KER_CTX_PARAM KER_BYTE btTraceMode)
Set trace mode.
KER_VOID def_hal_trace_tvr(KER_CTX_PARAM const KER_CHAR *pchComment, const KER_BYTE *pbtTvr, KER_BYTE btTvrLen)
Default "trace TVR" implementation.
TLV container structure.
Definition: emv_data.h:63